﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using SIGERP_Entidades;
using SIGERP_Negocio;
using System.Diagnostics;

namespace SIGERP_Presentacion
{
    public partial class frmConsultaGrilla : Form
    {
        DataTable dt;
        List<Reclamo> reclamos=new List<Reclamo>();
        private Cliente cliente = null;
        private ErrorProvider ep = new ErrorProvider();

        public frmConsultaGrilla()
        {
            InitializeComponent();
            cargarGrilla();
            cmbTipoFecha.Width=Utilities.adjustWidth(cmbTipoFecha);
            cmbTipoFecha.SelectedIndex = 0;
            llenarCmbArea();
        }

        private void cargarGrilla()
        {
            dt = new DataTable();
            dt.Columns.Add("Nº", typeof(int));
            dt.Columns.Add("Tipo y Nº Doc", typeof(string)); 
            dt.Columns.Add("Cliente", typeof(string)); 
            dt.Columns.Add("Tipo - SubTipo", typeof(string));          
            dt.Columns.Add("Estado", typeof(string));
            dt.Columns.Add("Fecha de ingreso", typeof(string));
            dt.Columns.Add("Depto actual", typeof(string));
            dt.Columns.Add("Usuario actual", typeof(string));
            dt.Columns.Add("Fecha tentativa de resolución", typeof(string));
            dt.Columns.Add("Fecha de resolución", typeof(string));
            dt.Columns.Add("Reiteraciones", typeof(int));

            grilla.DataSource = dt;
        }

        private void filtrar(object sender, EventArgs e)
        {
            ep.Clear();
            DateTime? desde = (DateTime?)dtpDesde.Value;
            DateTime? hasta = (DateTime?)dtpHasta.Value;
            Area area = (Area)cmbArea.SelectedItem;
            Departamento depto = (Departamento)cmbDepartamento.SelectedItem;

            if (dtpDesde.Value == null && dtpHasta.Value == null && cliente == null && area.id == 0 && sender == null)
            {btnBuscarNro_Click(null, null);
                return;}

            if (dtpDesde.Value == null && dtpHasta.Value != null)
            {
                dtpDesde.Focus();
                ep.SetError(dtpDesde, "La fecha desde no puede estar vacía.");
                return;
            }
            if (dtpDesde.Value != null && dtpHasta.Value == null)
            {
                dtpHasta.Focus();
                ep.SetError(dtpHasta, "La fecha hasta no puede estar vacía.");
                return;
            }
            if (dtpDesde.Value == null && dtpHasta.Value == null && cliente == null && area.id==0)
            {
                MessageBox.Show("Elija al menos un criterio de búsqueda.");
                dtpDesde.Focus();
                return;
            }

            dt.Clear();

            txtNroReclamo.Text = "";
            reclamos = Reclamos.ConsultaReclamos(cmbTipoFecha.SelectedIndex,desde,hasta,cliente,area,depto);
            
            if (reclamos.Count == 0) 
                MessageBox.Show(this,"No se encontraron resultados para la búsqueda");

            foreach (Reclamo r in reclamos)
            {
                String fecha_tent="";
                String fecha_resol="";
                
                if(r.fecha_tentativa!=null)fecha_tent=((DateTime)r.fecha_tentativa).ToShortDateString();
                if (r.fecha_resolucion != null) fecha_resol = ((DateTime)r.fecha_resolucion).ToShortDateString();
                String usuario_actual = "";
                String depto_actual = "";
                if(r.usuario_actual!=null)usuario_actual=r.usuario_actual.descripcion;
                if (r.departamento_actual!=null) depto_actual = r.departamento_actual.descripcion;
                dt.Rows.Add(r.id, r.cliente.getTipoNroDoc(),r.cliente.getApellidoNombre(), r.subtiporeclamo, r.estadoreclamo, r.fecha_ingreso.ToShortDateString(), depto_actual, usuario_actual, fecha_tent, fecha_resol, r.cant_reiteraciones);
            }
        }

        private void seleccionaReclamo(object sender, DataGridViewCellEventArgs e)
        {
            
            if (grilla.Rows[e.RowIndex].Cells[0] != null) 
            {
                int nroReclamo = Int32.Parse(grilla.Rows[e.RowIndex].Cells[0].Value.ToString());
                Reclamo r = Reclamos.GetOne(nroReclamo);
                frmConsultarReclamo fcr = new frmConsultarReclamo(r);
                fcr.StartPosition = FormStartPosition.CenterParent;
                fcr.ShowDialog();
                filtrar(null, null);
            }
        }

        private void toolStripAyuda_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, "C:/SIGERP/SIGERP_AYUDA.chm", HelpNavigator.Topic, "frmIntervencionGrilla.htm");
        }

        private void btnBuscarNro_Click(object sender, EventArgs e)
        {
            ep.Clear();

            if (txtNroReclamo.Text.Equals(""))
            {
                txtNroReclamo.Focus();
                ep.SetError(txtNroReclamo, "Ingrese un número de reclamo.");
                return;
            }

            dtpDesde.Value = null;
            dtpHasta.Value = null;
            seleccionarTodos(null, null);
            cmbArea.SelectedIndex = 0;

            dt.Clear();
            reclamos.Clear();

            reclamos.Add(Reclamos.GetOne(Int32.Parse(txtNroReclamo.Text)));

            foreach (Reclamo r in reclamos)
            {
                if (r != null)
                {
                    String fecha_tent = "";
                    String fecha_resol = "";
                    if (r.fecha_tentativa != null) fecha_tent = ((DateTime)r.fecha_tentativa).ToShortDateString();
                    if (r.fecha_resolucion != null) fecha_resol = ((DateTime)r.fecha_resolucion).ToShortDateString();
                    String usuario_actual = "";
                    String depto_actual = "";
                    if (r.usuario_actual != null) usuario_actual = r.usuario_actual.descripcion;
                    if (r.departamento_actual != null) depto_actual = r.departamento_actual.descripcion;
                    dt.Rows.Add(r.id, r.subtiporeclamo, r.estadoreclamo, r.fecha_ingreso.ToShortDateString(),depto_actual,usuario_actual, fecha_tent, fecha_resol, r.cant_reiteraciones);
                }
            }
        }

        private void botonAExcel1_Click(object sender, EventArgs e)
        {
            
            botonAExcel1.GenerateExcelWithCharts(dt, "Consulta reclamos");
        }

        private void seleccionarTodos(object sender, EventArgs e)
        {
            txtCliente.Text = "TODOS";
            cliente = null;
        }

        private void seleccionarCliente(object sender, EventArgs e)
        {
            frmBuscarCliente fbc = new frmBuscarCliente();
            fbc.ShowDialog();
            if (fbc.getCliente() != null)
            {
                cliente = fbc.getCliente();
                txtCliente.Text = cliente.tipodocumento + " " + cliente.numero_documento + " - " + cliente.apellido + ", " + cliente.nombre;
            }
        }

        private void llenarCmbArea()
        {
            List<Area> areasHabilitadas = Areas.buscarAreasHabilitadas();
            Area todas = new Area();
            todas.id = 0;
            todas.descripcion = "TODAS";
            cmbArea.Items.Add(todas);
            foreach (Area a in areasHabilitadas)
            {
                cmbArea.Items.Add(a);
            }
            if (cmbArea.Items.Count > 0)
                cmbArea.SelectedIndex = 0;
            cmbArea.Width = Utilities.adjustWidth(cmbArea);
        }

        private void llenarCmbDepto(object sender, EventArgs e)
        {
            List<Departamento> departamentos = Departamentos.buscarDepartamentosArea((Area)cmbArea.SelectedItem);
            cmbDepartamento.Items.Clear();
            if (((Area)cmbArea.SelectedItem).id != 0)
            {
                Departamento todos = new Departamento();
                todos.id = 0;
                todos.descripcion = "TODOS";
                cmbDepartamento.Items.Add(todos);
                foreach (Departamento d in departamentos)
                {
                    cmbDepartamento.Items.Add(d);
                }
                if (cmbDepartamento.Items.Count > 0)
                    cmbDepartamento.SelectedIndex = 0;
                cmbDepartamento.Width = Utilities.adjustWidth(cmbDepartamento);
            }
        }

        private void llenarCmbDepto()
        {

        }

        private void toolStripAyuda_Click_1(object sender, EventArgs e)
        {
            Help.ShowHelp(this, "/SIGERP_AYUDA.chm", HelpNavigator.Topic, "frmConsultaGrilla.htm");
        }


    }
}
